﻿#pragma once
#include "zyCommandCtrol.h"
#include "zyEditBox.h"
#include "zyListBox.h"
#include "zyLmageList.h"
namespace BlackMoonUI {

	class zyComboBoxEx : public  zyCommandCtrol
	{
	public:
		zyComboBoxEx();
		~zyComboBoxEx();
		
		static void  WINAPI zyComboBoxEx_Destroy(zyObject* obj);
		static LRESULT WINAPI zyComboBoxEx_ChildWndProc(zyObject* obj, HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, BOOL* bHandle);
		static LRESULT  WINAPI zyComboBoxEx_WndProc(zyObject* obj, HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL* bHandled);
		void OnNCDestroy();
		BOOL 创建(HWND 参数_父窗口, const std::wstring& 参数_标题 = L"", POINT 参数_位置 = POINT{ 0, 0 }, POINT 参数_尺寸 = POINT{ 60, 120 },
			int 参数_ID = 0, int 参数_窗口风格 = 0, int 参数_扩展风格 = 0);
		BOOL 创建(zyWindow& 参数_父窗口, const std::wstring& 参数_标题 = L"", POINT 参数_位置 = POINT{ 0, 0 }, POINT 参数_尺寸 = POINT{ 60, 120 },
			int 参数_ID = 0, int 参数_窗口风格 = 0, int 参数_扩展风格 = 0);
		int 插入项目(int 参数_插入索引 = -1, const std::wstring& 参数_项目标题 = L"", int 参数_图片索引 = -1, int 参数_选中图片索引 = -1, int 参数_覆盖图片索引 = -1, int 参数_缩进距离 = -1, int 参数_项目数值 = 0);
		bool 置现行选中项(int 参数_项目索引);
		int 取现行选中项();
		void 置图片组(zyLmageList& 参数_图片组);
		zyLmageList 取图片组();
		int 取项目数() { return (int)sendMsg(CB_GETCOUNT, 0, 0); }
		bool 删除项目(int 参数_项目索引) { return sendMsg(CBEM_DELETEITEM, 参数_项目索引, 0) != CB_ERR; }
		bool 清空() { return sendMsg(CB_RESETCONTENT, 0, 0) != 0; }
		std::wstring 取项目文本(int 参数_项目索引);
		bool 置项目文本(int 参数_项目索引, const std::wstring& 参数_项目文本);
		int 取图片(int 参数_项目索引);
		bool 置图片(int 参数_项目索引, int 参数_图片索引);
		int 取选中图片(int 参数_项目索引);
		bool 置选中图片(int 参数_项目索引, int 参数_选中图片索引);
		int 取覆盖图片(int 参数_项目索引);
		bool 置覆盖图片(int 参数_项目索引, int 参数_图片索引);
		INT_PTR 取项目数值(int 参数_项目索引);
		bool 置项目数值(int 参数_项目索引, INT_PTR 参数_项目数值);
		int 取项目缩进(int 参数_项目索引);
		bool 置项目缩进(int 参数_项目索引, int 参数_项目缩进);
		zyComboBoxEx* 取组合框();
		zyEditBox* 取编辑框();
		//@备注 函数 整型 OnSelChange(HWND hWnd,整型 id)
		void 事件_列表项被选择(TRegEvent* 参数_事件指针) { SetRegEvent(L"OnSelChange", 参数_事件指针); }
		//@备注 函数 整型 OnEditChange(HWND hWnd,整型 id)
		void 事件_编辑内容被改变(TRegEvent* 参数_事件指针) { SetRegEvent(L"OnEditChange", 参数_事件指针); }
		//@备注 函数 整型 OnDropDown(HWND hWnd,整型 id)
		void 事件_将弹出列表(TRegEvent* 参数_事件指针) { SetRegEvent(L"OnDropDown", 参数_事件指针); }
		//@备注 函数 整型 OnCloseUp(HWND hWnd,整型 id)
		void 事件_列表被关闭(TRegEvent* 参数_事件指针) { SetRegEvent(L"OnCloseUp", 参数_事件指针); }
		//@备注 函数 整型 OnDBClick(HWND hWnd,整型 id)
		void 事件_双击选择(TRegEvent* 参数_事件指针) { SetRegEvent(L"OnDBClick", 参数_事件指针); }

	};

}

